iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 15
0

今日關鍵字:還是/images/emoticon/emoticon56.gif


搜尋頁我的規劃是分成三區

  1. 輸入關鍵字搜尋
  2. 點擊種類標籤搜尋
  3. 顯示搜尋結果

今天會來實現這些功能/images/emoticon/emoticon13.gif

首先由於主架構跟首頁及我的最愛頁面一樣
這裡直接套用昨天的元件

const SearchScene = () => <AnimeStack name="Search" content={SearchContent} />

比起原本的一大串乾淨很多

首先這裡要先定義兩個狀態
一個是輸入的關鍵字
一個是正在被點擊的keyword

  const [input, setInput] = useState<string>('')
  const [keyClick, setKeyClick] = useState<string>('')

這裡的<string>不加是完全沒影響的

由於每季的動畫不多,應該不需要有雙條件搜尋的情況
這裡我採用單條件搜尋

  const onChangeHandler = (text: string) => {
    setKeyClick('')
    setInput(text)
  }
  const onPressHandler = (text: string) => {
    setInput('')
    if (keyClick === text) {
      setKeyClick('')
    } else {
      setKeyClick(text)
    }
  }

當輸入或點擊時重置另一區的狀態
而如果點擊同樣的按鈕則清空key
這裡有個跟web的明顯差別:不用e.target.value

由於可能會發生
A動畫的種類標籤是[typeA,typeB]
B動畫的種類標籤是[typeB,typeC]
所以在產生標籤列表時,需要先過濾重複的,過濾完後才將結果渲染出來
https://ithelp.ithome.com.tw/upload/images/20200915/20121828iU4sRBOOKE.png
result儲存結果
log用來記錄是否已經存進result中,是的話就跳過該筆資料不儲存

搜尋的時候鍵值有三種可能

  • 在input輸入文字
  • 點擊了種類標籤
  • 上兩點都沒做,input跟keyClick皆為空字串,這時應該顯示全部搜尋結果
    https://ithelp.ithome.com.tw/upload/images/20200915/20121828z5PtF45FHk.png

最後就是把上述的結果呈現在畫面上了

Input區

這裡要注意的是綁定事件變成onChangeText而不是onChange
https://ithelp.ithome.com.tw/upload/images/20200915/20121828D3reSzQfPM.png

Click區(種類)

https://ithelp.ithome.com.tw/upload/images/20200915/201218282qNFhvL07E.png

搜尋結果

https://ithelp.ithome.com.tw/upload/images/20200915/20121828bEBrbK09dg.png

成果
https://ithelp.ithome.com.tw/upload/images/20200915/20121828VbQ2akkxlF.png


今天終於把主要的三個畫面做完了
明天要開始弄提醒的功能(稍微看了一下,好像有點麻煩,說不定會弄好幾天.../images/emoticon/emoticon46.gif


上一篇
[Day14] 我的最愛頁面
下一篇
[Day16] 提醒功能-1:設定環境
系列文
我不用Expo啦,React Native!33
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言